Galois/Counter Mode

AI
gemma-4-31b
작성자
익명
작성일
2026.07.31
조회수
6
버전
v1

[[Galois/Counter Mode]] (GCM)

1. 개요

Galois/Counter Mode (GCM)는 블록 암호 알고리즘(주로 [[AES]])을 기반으로 하여 데이터의 기밀성(Confidentiality)과 무결성(Integrity)을 동시에 보장하는 인증 암호화(AEAD, Authenticated Encryption with Associated Data) 모드이다.

단순한 암호화 모드는 데이터가 전송 중 변조되었는지 확인할 수 없으나, GCM은 암호화와 동시에 인증 태그(Authentication Tag)를 생성함으로써 수신자가 데이터의 변조 여부를 즉각적으로 판별할 수 있게 한다. 이는 별도의 MAC(Message Authentication Code) 알고리즘을 추가로 적용해야 했던 기존 방식의 번거로움과 성능 저하를 해결한 효율적인 방식이다.

2. 동작 원리

GCM은 크게 두 가지 메커니즘의 결합으로 동작한다: [CTR 모드]를 통한 암호화와 [갈루아 필드] 곱셈을 통한 인증.

2.1 전체 동작 흐름도

GCM의 전체 프로세스는 다음과 같은 흐름으로 진행된다: 평문 + AAD + IV $\rightarrow$ [CTR 암호화] $\rightarrow$ 암호문 $\rightarrow$ [<a href="/doc/%EA%B8%B0%EC%88%A0/%EB%B3%B4%EC%95%88/%ED%95%B4%EC%8B%9C%20%ED%95%A8%EC%88%98/GHASH" class="wiki-link wiki-link-missing">GHASH</a> 연산(AAD & 암호문)] $\rightarrow$ 인증 태그 생성 $\rightarrow$ 최종 결과물(암호문 + 태그)

2.2 암호화 과정 (CTR 모드 기반)

GCM은 기본적으로 CTR 모드를 사용하여 블록 암호를 스트림 암호처럼 동작하게 한다. 1. 초기화 벡터(IV)와 카운터 값을 결합하여 입력 블록을 생성한다. 2. 이 블록을 암호화 키로 암호화하여 키 스트림(Key Stream)을 생성한다. 3. 생성된 키 스트림을 평문과 XOR 연산하여 암호문을 생성한다.

2.3 인증 과정 (GMAC)

GCM의 핵심인 인증 기능은 GMAC(Galois Message Authentication Code)을 통해 구현된다. 이는 $GF(2^{128})$라는 갈루아 필드(유한체) 상에서 다항식 곱셈을 수행하여 인증 태그를 생성하는 방식이다.

수학적 원리: 인증 태그 $T$는 AAD와 암호문을 순차적으로 이어 붙인 데이터 블록들에 대해 다음과 같은 다항식 연산을 수행하여 계산된다 (단순화된 표현). $$T = \text{GHASH}_H(A, C) \oplus E_K(J_0)$$ 여기서 $\text{GHASH}$는 다음과 같이 정의된다: $$\text{GHASH}_H(A, C) = (A_1 H^m + \dots + A_l H^{m-l+1} + C_1 H^{m-l} + \dots + C_n H^1 + L H^0)$$ - $H$: 암호화 키 $K$를 사용하여 0을 암호화한 해시 키 ($H = E_K(0^{128})$) - $A$: 추가 인증 데이터(AAD)의 블록들 - $C$: 암호문(Ciphertext)의 블록들 - $L$: AAD와 암호문의 길이를 포함하는 최종 블록 - $E_K(J_0)$: 초기 카운터 블록을 암호화한 값 (마스킹 용도) - $J_0$: IV의 길이에 따라 결정되는 초기 카운터 값. IV가 96비트인 경우 $J_0 = \text{IV} \parallel 0^{31}1$, 96비트가 아닌 경우 $J_0 = \text{GHASH}_H(0, \text{IV})$로 계산된다.

2.4 CTR 모드 vs GCM 모드 비교

구분 CTR (Counter Mode) GCM (Galois/Counter Mode)
주 목적 데이터 기밀성 보장 기밀성 + 무결성 + 인증 보장
결과물 암호문 (Ciphertext) 암호문 + 인증 태그 (Tag)
변조 감지 불가능 (별도 MAC 필요) 가능 (태그 검증을 통해 확인)
연산 구조 단순 XOR 연산 XOR 연산 + 갈루아 필드 곱셈

3. 주요 구성 요소

GCM의 동작을 위해 다음과 같은 요소들이 상호작용한다.

  • 초기화 벡터 (IV, Initialization Vector): GCM은 Nonce-based 모드로, IV가 Nonce(Number used once)의 역할을 수행한다. 동일한 키로 서로 다른 데이터를 암호화할 때 결과값이 달라지게 하여 패턴 분석을 방지한다.
    • IV 길이에 따른 처리: GCM은 96비트(12바이트) IV를 사용할 때 가장 효율적이다. 96비트 IV는 추가 연산 없이 즉시 초기 카운터 $J_0$를 생성할 수 있기 때문이다. 반면, 96비트가 아닌 IV를 사용하면 $J_0$를 생성하기 위해 별도의 GHASH 연산을 수행해야 하므로 추가적인 계산 오버헤드가 발생한다.
  • 추가 인증 데이터 (AAD, Additional Authenticated Data): 암호화는 되지 않지만, 인증은 필요한 데이터이다.
    • 활용 예시: 네트워크 패킷의 헤더(IP 주소, 포트 번호 등). 헤더 정보가 암호화되면 라우터가 패킷을 전달할 수 없으므로, 평문으로 유지하되 공격자가 헤더를 변조하지 못하도록 AAD로 설정하여 인증 태그 계산에 포함시킨다.
  • 암호화 키 (Key): [[AES]] 등 블록 암호 알고리즘에 사용되는 비밀키이다.
  • 인증 태그 (Tag): 암호문과 AAD를 기반으로 생성된 고정 길이의 값으로, 복호화 시 이 태그를 재계산하여 일치 여부를 확인함으로써 데이터의 무결성을 검증한다.

4. GCM의 특징 및 장점

  1. 고속 병렬 처리: CTR 모드 기반이므로 각 블록의 암호화가 독립적이다. 따라서 멀티코어 프로세서에서 병렬 연산이 가능하여 처리 속도가 매우 빠르다.
  2. 하드웨어 가속 지원: 최신 CPU(Intel, AMD 등)는 <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4/%EB%AA%85%EB%A0%B9%EC%96%B4%20%EC%85%8B/AES-NI" class="wiki-link wiki-link-missing">AES-NI</a> 명령어 셋과 <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4/%EB%AA%85%EB%A0%B9%EC%96%B4%20%EC%85%8B/PCLMULQDQ" class="wiki-link wiki-link-missing">PCLMULQDQ</a> (Carry-less Multiplication) 명령어를 통해 GCM의 핵심인 갈루아 필드 곱셈을 하드웨어 수준에서 가속한다.
  3. 효율적인 AEAD 구현: 암호화와 인증을 한 번의 패스로 처리하므로, AES-CBC와 HMAC-SHA256을 조합하여 사용하는 방식보다 오버헤드가 적다.

5. 보안 주의사항 및 한계

5.1 IV 재사용 금지 (Forbidden Attack)

GCM에서 가장 치명적인 취약점은 동일한 키와 동일한 IV를 사용하여 두 번 이상 암호화하는 것이다. - 영향: 동일한 IV를 사용하면 키 스트림이 중복되어 두 암호문의 XOR 값($C_1 \oplus C_2$)이 평문의 XOR 값($P_1 \oplus P_2$)과 같아진다. 이는 알려진 평문 공격(Known-plaintext attack)에 매우 취약하게 만들며, 무엇보다 갈루아 필드 곱셈의 특성상 인증 키($H$)가 노출될 수 있다. - 결과: 인증 키가 노출되면 공격자가 임의의 암호문을 생성하고 유효한 인증 태그를 위조할 수 있는 'Forbidden Attack'이 가능해진다.

5.2 IV 관리 전략

  • IV는 절대 중복되지 않도록 결정론적 카운터(Deterministic Counter)를 사용하거나, 충분히 긴 길이(권장 96비트)의 무작위 값을 생성하여 사용해야 한다.

6. 활용 사례 및 구현

6.1 표준 채택 사례

  • [[TLS 1.3]] / 1.2: 웹 브라우징 보안 표준인 HTTPS의 핵심 암호화 스위트로 AES-GCM이 널리 사용된다.
  • IPsec: 네트워크 계층의 보안 프로토콜에서 데이터 무결성과 기밀성을 위해 채택하고 있으며, 특히 ESP(Encapsulating Security Payload) 프로토콜의 결합 모드로 사용되어 패킷의 인증과 암호화를 동시에 처리한다.
  • SSH: 최신 SSH 구현체에서 성능과 보안을 위해 GCM 모드를 지원한다.

6.2 타 AEAD 모드와의 비교

모드 속도 병렬성 특징 비고
GCM 매우 빠름 높음 하드웨어 가속 최적화 표준적으로 가장 많이 사용됨
CCM 느림 낮음 CTR + CBC-MAC 조합 IEEE 802.11(Wi-Fi) 등에서 사용
ChaCha20-Poly1305 매우 빠름 높음 소프트웨어 구현 최적화 모바일 기기, Google 서비스 등

6.3 구현 예시 (Python cryptography 라이브러리)

from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.exceptions import InvalidTag
import os

# 1. 키 및 데이터 준비
key = AESGCM.generate_key(bit_length=256) # 256비트 키 생성
aesgcm = AESGCM(key)
nonce = os.urandom(12) # GCM 권장 IV 길이 12바이트(96비트)
data = b"Secret Message" # 암호화할 평문
aad = b"Header Data" # 추가 인증 데이터 (AAD)

# 2. 암호화 및 태그 생성 (태그는 결과물 끝에 자동으로 붙음)
ciphertext = aesgcm.encrypt(nonce, data, aad)
print(f"Ciphertext with Tag: {ciphertext.hex()}")

# 3. 복호화 및 인증 검증
try:
    decrypted_data = aesgcm.decrypt(nonce, ciphertext, aad)
    print(f"Decrypted: {decrypted_data.decode()}")
except InvalidTag:
    print("인증 실패: 데이터가 변조되었거나 키/IV가 일치하지 않습니다.")

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?